package com.dxf.chepter06

/**
 * trait 特质:  类似接口
 * 特质:
 * 类与类之间只支持单继承
 * 类与特质直接可以多继承
 * scala的特质中有普通字段,抽象字段,普通方法,抽象方法
 * 叫法:
 * 1 特质中只有抽象内容,这样的特质叫      瘦接口
 * 2 特质中既有内容,又又具体内容,叫       富接口
 *
 * 定义特质
 * trait 名称{
 * //普通字段
 * //抽象洗的
 * //普通方法
 * //抽象方法
 * }
 *
 * 继承特殊值
 *
 * class 类名 extents 特质1 with 特质2 with 特质3 {
 * //重写抽象方法
 * //重写抽象字段
 * //可重写普通字段和普通方法
 * }
 *
 *
 * =====================================
 *
 *
 * 对象动态混入 :
 *  类和特质直接无任何关系,在不改变继承体系下,对对象的功能进行增强或者扩展,使用对象混入计数
 *
 *  语法:
 *    var/val 对象名 = new 类 with 特质
 *
 *
 *  特质中的字段不是继承给子类,而是直接加入其中
 *
 *
 *    class AA{
 *
 *    }
 *    class BB{
 *    }
 *
 *    trait CC{
 *    }
 *    trait DD{
 *    }
 *
 *   动态混入属性:
 *
 *
 *
 *     new AA extends BB  with CC with DD --> 先创建new AA 再混入  -->  先创建BB ,再AA ,再特质相关的 CC 和 DD构造器 -> BB AA CC DD
 *
 *   继承特质
 *    class AA extend BB with CC with DD   -->正常的java逻辑,类到特质,有父类,父类先.重复特质只会初始化一次 --> BB CC DD AA
 */
object T67_对象混入 {
  def main(args: Array[String]): Unit = {
    val user = new User with Logger {
      override def log(msg: String): Unit = println(s"xxxx${msg}")
    }

    user.log("234")

  }


  trait Logger {
    var str:String=_

    def log(msg:String)
  }

  class User {

  }

}

